package pe.com.pgn.consolidadorventas.servidorcentral.web;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.com.pgn.consolidadorventas.servidorcentral.dbo.Estacion;
import pe.com.pgn.consolidadorventas.servidorcentral.service.EstacionService;
import pe.com.pgn.consolidadorventas.servidorcentral.service.ProcedureService;
import pe.com.pgn.consolidadorventas.servidorcentral.service.RecargasService;
import pe.com.pgn.consolidadorventas.servidorcentral.util.Constantes;
import pe.com.pgn.consolidadorventas.servidorcentral.util.FechasUtil;
import pe.com.pgn.consolidadorventas.servidorcentral.util.LoggerUtil;

@Controller(value="recargasController")
public class RecargasController {

	static Logger logger = Logger.getLogger(RecargasController.class);

	@Autowired
	@Qualifier("estacionServiceImpl")
	EstacionService estacionService;
	
	@Autowired
	@Qualifier("recargasServiceImpl")
	RecargasService recargasService;
	
	@Autowired
	@Qualifier("procedureServiceImpl")
	ProcedureService procedureService;
	
	public RecargasController(){
		
	}
	
	@RequestMapping(value="/gestionRecargas.php")
	public ModelAndView gestionRecargas(HttpServletRequest request, HttpServletResponse response){
		ModelAndView model = new ModelAndView("gestionRecargas");
		List<Estacion> listaEstaciones = estacionService.obtenerEstacionesHabilitadas();
		model.addObject("listaEstaciones",listaEstaciones);
		return model;
	}
	
	@RequestMapping(value="/recargarEstacion.php")
	public ModelAndView recargarEstacion(HttpServletRequest request, HttpServletResponse response){
		ModelAndView model = new ModelAndView("json");
		
		String idEstacion = request.getParameter("idEstacion");
		String fechaInicio = request.getParameter("fechaInicio");
		String fechaFin = request.getParameter("fechaFin");
		String modoRecarga = request.getParameter("modoRecarga");

		Estacion estacion = estacionService.obtenerEstacionXId(Integer.parseInt(idEstacion));
		
		int numDias = FechasUtil.obtenerDiasDiferenciaEntreFechas(fechaInicio, fechaFin);
		int inc = 0;
		
		Calendar cx = Calendar.getInstance();
		Date fechaRecarga = FechasUtil.formatearStringToDate(fechaInicio);
		cx.setTime(fechaRecarga);
		
		JSONArray arrayRptas = new JSONArray();
		
		Map<String,Object> mapRpta = null;
		String rptaRecarga = "";
		Integer tipoRpta = -1;
		
		do{
			mapRpta = new HashMap<String,Object>();
			Map<String,Object> parametros = new HashMap<String,Object>();
			String strFechaRecarga = FechasUtil.formatearDateToString(fechaRecarga);
			parametros.put("estacion",estacion);
			parametros.put("fechaRecarga",strFechaRecarga);
			parametros.put("modoRecarga", modoRecarga);

			try{
				mapRpta = recargasService.recargarInformacionVentas(parametros);
				rptaRecarga = (String)mapRpta.get("rptaRecarga");
				tipoRpta = (Integer)mapRpta.get("tipoRpta");
				
			}catch(Exception e){
				rptaRecarga = "Error en recarga para la estacion para el dia "+strFechaRecarga+" : "+e.getLocalizedMessage();
				tipoRpta = -1;
				LoggerUtil.error(logger,rptaRecarga);
			}
			
			try{
				if(estacion.getTipoVenta() == Constantes.TIPO_VENTA_GNV){
					procedureService.ejecutarProcedureEstadisticasEds(estacion.getIdEstacion(),strFechaRecarga);
				}
			}catch(Exception e){
				LoggerUtil.error(logger,e.getMessage());
			}
			
			cx.add(Calendar.DAY_OF_MONTH,1);
			fechaRecarga = cx.getTime();
			inc = inc + 1;
			
			JSONObject objJSON = new JSONObject();
			objJSON.put("fechaRecarga", strFechaRecarga);
			objJSON.put("rptaRecarga", rptaRecarga);
			objJSON.put("tipoRpta",String.valueOf(tipoRpta));
			arrayRptas.add(objJSON);
		}while(inc <= numDias);
		
		model.addObject("json", arrayRptas.toString());
		return model;
	}
}
